/**
 * 
 */
package com.epcs.subGNuevosNegocios.eci.dao.proceso;

import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;

import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleTypes;

import com.epcs.subGNuevosNegocios.eci.conexion.ConexionOracle;
import com.epcs.subGNuevosNegocios.eci.exception.ConnectionOracleException;
import com.epcs.subGNuevosNegocios.eci.exception.ECISQLException;
import com.epcs.subGNuevosNegocios.eci.to.AtributoTO;
import com.epcs.subGNuevosNegocios.eci.to.ClienteTO;
import com.epcs.subGNuevosNegocios.eci.to.ControllerTO;
import com.epcs.subGNuevosNegocios.eci.to.EncuestaTO;
import com.epcs.subGNuevosNegocios.eci.to.HijounidadTO;
import com.epcs.subGNuevosNegocios.eci.to.PreguntaTO;
import com.epcs.subGNuevosNegocios.eci.to.ProveedorServicioTO;
import com.epcs.subGNuevosNegocios.eci.to.UsuarioTO;


/**
 * @author Nicolas Figueroa
 *
 */
public class ProcesoDAOImplement implements ProcesoDAOInterface {

	/* Metodo que crea una encuesta*/
	//@Override
	public int creaEncuesta(EncuestaTO encuestaTO) 
	{		
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		int idProceso;
		try{
			stmtProcedure = connection.prepareCall("{ call PRO_ECI_CREAENCUESTA(?,?,?,?,?,?,?,?,?,?,?) }");
			stmtProcedure.setString(1, encuestaTO.getNombreProceso());
			stmtProcedure.setString(2, encuestaTO.getDescripcionProceso());
			stmtProcedure.setInt(3, encuestaTO.getValorEscalaInicio());
			stmtProcedure.setInt(4, encuestaTO.getValorEscalaFin());
			stmtProcedure.setInt(5, encuestaTO.getCantidadClientesPorPreguntas());
			stmtProcedure.setString(6, encuestaTO.getStrControllers());
			stmtProcedure.setInt(7, encuestaTO.getCantControllers());
			stmtProcedure.setString(8, encuestaTO.getPreguntas());
			stmtProcedure.setInt(9, encuestaTO.getCantPreguntas());
			stmtProcedure.setString(10, encuestaTO.getRutCreador());
			stmtProcedure.registerOutParameter(11, Types.INTEGER);
			
			stmtProcedure.execute();
			idProceso = stmtProcedure.getInt(11);
			//System.out.print("id1: "+ stmtProcedure.getInt(10));
			return idProceso;
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
	 //return 0;

	}
	
	/*Metodo que devuelve una lista de Encuestas*/
	//@Override
	public List<EncuestaTO> getAllProcess() 
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		ResultSet rs=null;
		
		List<EncuestaTO> lstEncuesta = new ArrayList<EncuestaTO>();
		try{
			stmtProcedure = connection.prepareCall("{call PRO_ECI_OBTENERPROCESOS(?)}");
			stmtProcedure.registerOutParameter(1, OracleTypes.CURSOR);
			stmtProcedure.execute();
			rs = ((OracleCallableStatement)stmtProcedure).getCursor(1);
			
			/*
			 * 1-Id
			 * 2-Nombre
			 * 3-Descripcion
			 * 4-fecha-creacion
			 * 5-id Estado
			 * 6-nomb Estado
			 */
			
			while(rs.next())
			{
				EncuestaTO encuestaTO = new EncuestaTO();
				encuestaTO.setIdProceso(rs.getInt(1));
				encuestaTO.setNombreProceso(rs.getString(2));
				encuestaTO.setDescripcionProceso(rs.getString(3));
				encuestaTO.setFechaCreacion(rs.getDate(4));
				encuestaTO.setIdEstado(rs.getInt(5));
				encuestaTO.setNombEstado(rs.getString(6));
				lstEncuesta.add(encuestaTO);
			}
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		return lstEncuesta;
	}
	
	/*Metodo que devuelve una lista de Encuestas*/
	//@Override
	public List<EncuestaTO> getAllOldProcess() 
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		ResultSet rs=null;
		
		List<EncuestaTO> lstEncuesta = new ArrayList<EncuestaTO>();
		try{
			stmtProcedure = connection.prepareCall("{call PRO_ECI_OBTENERPROCESOS(?)}");
			stmtProcedure.registerOutParameter(1, OracleTypes.CURSOR);
			stmtProcedure.execute();
			rs = ((OracleCallableStatement)stmtProcedure).getCursor(1);
			
			/*
			 * 1-Id
			 * 2-Nombre
			 * 3-Descripcion
			 * 4-fecha-creacion
			 * 5-id Estado
			 * 6-nomb Estado
			 */
			
			while(rs.next())
			{
				EncuestaTO encuestaTO = new EncuestaTO();
				encuestaTO.setIdProceso(rs.getInt(1));
				encuestaTO.setNombreProceso(rs.getString(2));
				encuestaTO.setDescripcionProceso(rs.getString(3));
				encuestaTO.setFechaCreacion(rs.getDate(4));
				encuestaTO.setIdEstado(rs.getInt(5));
				encuestaTO.setNombEstado(rs.getString(6));
				lstEncuesta.add(encuestaTO);
			}
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		return lstEncuesta;
	}

	/*Metodo que retorna una Encuesta*/
	//@Override
	public EncuestaTO getProceso(Integer idProceso) 
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		
		EncuestaTO encuesta = null;
		try{
			stmtProcedure = connection.prepareCall("{call PRO_ECI_OBTENERPROCESOBYID(?,?,?,?,?,?,?)}");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.registerOutParameter(2, Types.VARCHAR);
			stmtProcedure.registerOutParameter(3, Types.VARCHAR);
			stmtProcedure.registerOutParameter(4, Types.NUMERIC);
			stmtProcedure.registerOutParameter(5, Types.NUMERIC);
			stmtProcedure.registerOutParameter(6, Types.NUMERIC);
			stmtProcedure.registerOutParameter(7, Types.NUMERIC);
			stmtProcedure.execute();
				encuesta = new EncuestaTO();
				encuesta.setIdProceso(idProceso);
				encuesta.setNombreProceso(stmtProcedure.getString(2));
				encuesta.setDescripcionProceso(stmtProcedure.getString(3));
				encuesta.setValorEscalaInicio(stmtProcedure.getInt(4));
				encuesta.setValorEscalaFin(stmtProcedure.getInt(5));
				encuesta.setCantidadClientesPorPreguntas(stmtProcedure.getInt(6));
				encuesta.setIdEstado(stmtProcedure.getInt(7));
				
			//recuperamos la lista de controllers que asigno el administrador
			encuesta.setLstControllers(getControllers(idProceso));
			
			//recuperamos la lista de preguntas que ha incorporado el admin
			encuesta.setLstPreguntasGrales(getPreguntasGenerales(idProceso));
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		return encuesta;
	}

	//@Override
	public List<ControllerTO> getControllers(Integer idProceso) 
	{
		//System.out.print("getControllers");
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		ResultSet rs=null;
		List<ControllerTO> lstController=null;
		try{
			stmtProcedure = connection.prepareCall("{call PRO_ECI_GETCONTROLLERS(?,?)}");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.registerOutParameter(2, OracleTypes.CURSOR);
			stmtProcedure.execute();
			rs = ((OracleCallableStatement)stmtProcedure).getCursor(2);
			
			/*
			 * 1- rut usuario
			 * 2- nombre completo
			 * 3- nombre vp
			 * 4- codigo vp
			 */
			lstController = new ArrayList<ControllerTO>();
			ControllerTO controllerTO = null;
			while(rs.next())
			{
				controllerTO = new ControllerTO();
				controllerTO.setRut(rs.getString(1));
				controllerTO.setNombre(rs.getString(2));
				controllerTO.setAreaACargo(rs.getString(3));
				controllerTO.setCodUnidad(rs.getString(4));
				lstController.add(controllerTO);
			}
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		return lstController;
	}

	//@Override
	public List<PreguntaTO> getPreguntasGenerales(Integer idProceso) 
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		ResultSet rs=null;
		List<PreguntaTO> lstPreguntas=null;
		try{
			stmtProcedure = connection.prepareCall("{call PRO_ECI_GETPREGUNTAS(?,?)}");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.registerOutParameter(2, OracleTypes.CURSOR);
			stmtProcedure.execute();
			rs = ((OracleCallableStatement)stmtProcedure).getCursor(2);
			
			/*
			 * 1- id Pregunta
			 * 2- enunciado pregunta
			 * 3- nombre Subtipo
			 * 4- id subtipo
			 */
			lstPreguntas = new ArrayList<PreguntaTO>();
			PreguntaTO preguntaTO = null;
			while(rs.next())
			{
				preguntaTO = new PreguntaTO();
				preguntaTO.setIdPregunta(rs.getInt(1));
				preguntaTO.setEnunciado(rs.getString(2));
				preguntaTO.setIdSubtipo(rs.getInt(4));
				preguntaTO.setNombreSubtipo(rs.getString(3));
				
				if(preguntaTO.getIdSubtipo()==3)
				{
					preguntaTO.setLstAtributos(getAtributosPregunta(preguntaTO.getIdPregunta()));
				}
				
				lstPreguntas.add(preguntaTO);
			}
			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		
		return lstPreguntas;
	}
	

	/*Metodo que devuelve la lista de atributos que corresponden a una pregunta*/
	//@Override
	public List<AtributoTO> getAtributosPregunta(Integer idPregunta) 
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		ResultSet rs=null;
		List<AtributoTO> lstAtributos=null;
		try{
			stmtProcedure = connection.prepareCall("{call PRO_ECI_GETATRIBUTOS(?,?)}");
			stmtProcedure.setInt(1, idPregunta);
			stmtProcedure.registerOutParameter(2, OracleTypes.CURSOR);
			stmtProcedure.execute();
			rs = ((OracleCallableStatement)stmtProcedure).getCursor(2);
			
			/*
			 * 1- id atributo
			 * 2- nombre atributo
			 */
			lstAtributos = new ArrayList<AtributoTO>();
			AtributoTO atributoTO = null;
			while(rs.next())
			{
				atributoTO = new AtributoTO();
				atributoTO.setIdAtributo(rs.getInt(1));
				atributoTO.setNombAtributo(rs.getString(2));
				//System.out.print(atributoTO.getNombAtributo());
				lstAtributos.add(atributoTO);
			}
			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		
		return lstAtributos;
	}
	
	/*Metodo que cambia el estado del proceso*/
	public Boolean cambiaEstadoProceso(Integer idProceso, Integer estado)
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		Boolean state=false;
		try{
			//System.out.print("modifica");
			stmtProcedure = connection.prepareCall("{call PRO_ECI_CAMBIAESTADO(?,?)}");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.setInt(2, estado);
			stmtProcedure.execute();
			
			state=true;
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		return state;
	}

	/*Metodo que modifica los datos generales de un proceso*/
	//@Override
	public void modificaDatosGenerales(EncuestaTO encuestaTO) 
	{
		//System.out.print("modifica");
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		try{
			//System.out.print("modifica");
			stmtProcedure = connection.prepareCall("{call PRO_ECI_MODIFICADATOSGENERALES(?,?,?,?,?,?)}");
			stmtProcedure.setInt(1, encuestaTO.getIdProceso());
			stmtProcedure.setString(2, encuestaTO.getNombreProceso());
			stmtProcedure.setString(3, encuestaTO.getDescripcionProceso());
			stmtProcedure.setInt(4, encuestaTO.getValorEscalaInicio());
			stmtProcedure.setInt(5, encuestaTO.getValorEscalaFin());
			stmtProcedure.setInt(6, encuestaTO.getCantidadClientesPorPreguntas());
			
			stmtProcedure.executeUpdate();
			//return true;
			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		
		//return false;
	}
	
	/*Metodo que genera y devuelve el String para generar el archivo de preguntas*/
	//@Override
	public String generarYObtenerArchivoClientes(Integer idProceso) 
	{
		//System.out.print("modifica");
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		ResultSet rs=null;
		String strArchivo="";
		try{
			//System.out.print("modifica");
			stmtProcedure = connection.prepareCall("{call PRO_ECI_CREARARCHIVOCLIENTES(?,?)}");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.registerOutParameter(2, Types.CLOB);
			stmtProcedure.execute();
			
			Clob strClob = stmtProcedure.getClob(2);
			java.io.InputStream ip =strClob.getAsciiStream();
			
			java.io.BufferedReader ois =new java.io.BufferedReader( new java.io.InputStreamReader( ip));
			String strTmp;
			while((strTmp = ois.readLine())!=null){
				strArchivo = strArchivo + strTmp + "\n";				
			}
			
			ois.close();
			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		
		return strArchivo;
	}
	
	/*Metodo que genera y devuelve el String para generar el archivo de clientes*/
	//@Override
	public String generarYObtenerArchivoPreguntas(Integer idProceso) 
	{
		//System.out.print("modifica");
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		ResultSet rs=null;
		String strArchivo="";
		try{
			//System.out.print("modifica");
			stmtProcedure = connection.prepareCall("{call PRO_ECI_CREARARCHIVOPREGUNTAS(?,?)}");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.registerOutParameter(2, Types.CLOB);
			stmtProcedure.execute();
			
			Clob strClob = stmtProcedure.getClob(2);
			java.io.InputStream ip =strClob.getAsciiStream();
			
			java.io.BufferedReader ois =new java.io.BufferedReader( new java.io.InputStreamReader( ip));
			String strTmp;
			while((strTmp = ois.readLine())!=null){
				strArchivo = strArchivo + strTmp +"\n" ;				
			}
			
			ois.close();
			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		
		return strArchivo;
	}
	
	/*
	 * Metodo que eliminara un proceso completo  por el id del mismo
	 */
	public void eliminarProcesoByIdProceso(Integer idProceso)
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		try{
			stmtProcedure = connection.prepareCall("{call PRO_ECI_DELETEPROCESO(?)}");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.execute();			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
	}
	
	/*
	 *Metodo que elimina un controller de un proceso.
	 */
	public Boolean eliminarController(Integer idProceso, String rutController)
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		Boolean estado=false;
		try{
			//System.out.print("modifica");
			stmtProcedure = connection.prepareCall("{call PRO_ECI_DELETECONTROLLER(?,?)}");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.setString(2, rutController);
			stmtProcedure.execute();
			
			estado=true;
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		return estado;
	}
	
	/*
	 *Metodo que crea Controllers
	 */
	public void creaControllers(Integer idProceso, String strControllers, Integer cantControllers, String rutCreador)
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		try{
			//System.out.print("modifica");
			stmtProcedure = connection.prepareCall("{call PRO_ECI_CREACONTROLLERS(?,?,?,?)}");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.setString(2, strControllers);
			stmtProcedure.setInt(3, cantControllers);
			stmtProcedure.setString(4, rutCreador);
			
			stmtProcedure.execute();
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
	}

	//@Override
	public Integer obtienerPEncuestaActivo() 
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		Integer proceso=null;
		try{
			//System.out.print("modifica");
			stmtProcedure = connection.prepareCall("{call PRO_ECI_OBTIENEPROCESOACTIVO(?)}");
			stmtProcedure.registerOutParameter(1, Types.INTEGER);
			
			stmtProcedure.execute();
			
			proceso=stmtProcedure.getInt(1);
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		
		return proceso;
	}

	//@Override
	public List<ProveedorServicioTO> getProveedoresServicio(Integer idProceso) 
	{
		//System.out.print("getControllers");
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		ResultSet rs=null;
		List<ProveedorServicioTO> lstProveedorServicios=null;
		try{
			stmtProcedure = connection.prepareCall("{call PRO_ECI_GETPS(?,?)}");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.registerOutParameter(2, OracleTypes.CURSOR);
			stmtProcedure.execute();
			rs = ((OracleCallableStatement)stmtProcedure).getCursor(2);
			
			/*
			 * 1- rut usuario
			 * 2- nombre completo
			 * 3- nombre area
			 * 4- codigo area
			 * 5- nombre subgerencia
			 * 6- codigo subgerencia
			 * 7- nombre gerencia
			 * 8- codigo gerencia
			 * 9- nombre vp
			 * 10- codigo vp
			 */
			if(rs!=null)
			{
				lstProveedorServicios = new ArrayList<ProveedorServicioTO>();
				ProveedorServicioTO pServicioTO = null;
				while(rs.next())
				{
					pServicioTO = new ProveedorServicioTO();
					pServicioTO.setRut(rs.getString(1).trim());
					pServicioTO.setNombre(rs.getString(2).trim());
					pServicioTO.setNombArea(rs.getString(3)==null||rs.getString(3).equals("")?"":rs.getString(3).trim());
					pServicioTO.setCodArea(rs.getString(4)==null||rs.getString(4).equals("")?"":rs.getString(4).trim());
					pServicioTO.setNombSubgerencia(rs.getString(5)==null||rs.getString(5).equals("")?"":rs.getString(5).trim());
					pServicioTO.setCodSubgerencia(rs.getString(6)==null||rs.getString(6).equals("")?"":rs.getString(6).trim());
					pServicioTO.setNombGerencia(rs.getString(7)==null||rs.getString(7).equals("")?"":rs.getString(7).trim());
					pServicioTO.setCodGerencia(rs.getString(8)==null||rs.getString(8).equals("")?"":rs.getString(8).trim());
					pServicioTO.setNombVP(rs.getString(9)==null||rs.getString(9).equals("")?"":rs.getString(9).trim());
					pServicioTO.setCodVP(rs.getString(10)==null||rs.getString(10).equals("")?"":rs.getString(10).trim());
					lstProveedorServicios.add(pServicioTO);
				}
				
				if(lstProveedorServicios.size()==0)
					lstProveedorServicios=null;
			}
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					////System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		return lstProveedorServicios;
	}

	//@Override
	public void guardaSeleccionPS(Integer idProceso,String strPS, Integer cantPS, String rut_asginador, Integer perfil_asignador) 
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		try{
			if(strPS!=null || !strPS.equals(""))
			{
				/*
				 * param 1 id proceso
				 * param 2 string con los datos de los ps
				 * param 3 cant de ps
				 * param 4 rut del asignador 
				 * param 5 num perfil del asignador
				 */
				stmtProcedure = connection.prepareCall("{call PKG_ECI_PROCESONIVEL2.PRO_ECI_CREAPS(?,?,?,?,?)}");
				stmtProcedure.setInt(1, idProceso);
				stmtProcedure.setString(2, strPS);
				stmtProcedure.setInt(3, cantPS);
				stmtProcedure.setString(4, rut_asginador);
				stmtProcedure.setInt(5, perfil_asignador);
				stmtProcedure.execute();
			}
			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					////System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		
	}

	//@Override
	public List<HijounidadTO> obtenerVPsACargoController(UsuarioTO usuarioTO)
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		ResultSet rs = null;
		List<HijounidadTO> lstUnidades = null;
		try{
			 stmtProcedure = connection.prepareCall("{call PRO_ECI_OBTAREARESPCONTROLLER(?,?,?)}");
			 stmtProcedure.setInt(1, usuarioTO.getProcesoActivo());
			 stmtProcedure.setString(2, usuarioTO.getRut());
			 stmtProcedure.registerOutParameter(3, OracleTypes.CURSOR);
			 stmtProcedure.execute();
			 
			 rs=((OracleCallableStatement)stmtProcedure).getCursor(3);
			 
			 if(rs!=null)
			 {
				 lstUnidades = new ArrayList<HijounidadTO>();
				 HijounidadTO unidad = null;
				 while(rs.next())
				 {
					 unidad = new HijounidadTO();
					 unidad.setIdUnidad(rs.getString(1));
					 unidad.setNombre(rs.getString(2));
					 lstUnidades.add(unidad);
				 }
			 }
			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		
		return lstUnidades;
	}

	
	//@Override
	public List<HijounidadTO> obtenerAreasACargoPS(UsuarioTO usuarioTO)
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		ResultSet rs = null;
		List<HijounidadTO> lstUnidades = null;
		try{
			 stmtProcedure = connection.prepareCall("{call PRO_ECI_OBTAREARESPPS(?,?,?)}");
			 stmtProcedure.setInt(1, usuarioTO.getProcesoActivo());
			 stmtProcedure.setString(2, usuarioTO.getRut());
			 stmtProcedure.registerOutParameter(3, OracleTypes.CURSOR);
			 stmtProcedure.execute();
			 
			 rs=((OracleCallableStatement)stmtProcedure).getCursor(3);
			 
			 if(rs!=null)
			 {
				 lstUnidades = new ArrayList<HijounidadTO>();
				 HijounidadTO unidad = null;
				 while(rs.next())
				 {
					 unidad = new HijounidadTO();
					 unidad.setIdUnidad(rs.getString(1));
					 unidad.setNombre(rs.getString(2));
					 lstUnidades.add(unidad);
				 }
			 }
			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		
		return lstUnidades;
	}

	//@Override
	public boolean validaExisteCLiente(ClienteTO clienteTO) 
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		Boolean existe=false;
		try{
			stmtProcedure = connection.prepareCall("{ call PRO_ECI_VALIDACLIENTE(?,?) }");
			stmtProcedure.setString(1, clienteTO.getRut().trim());
			stmtProcedure.registerOutParameter(2, Types.INTEGER);
			stmtProcedure.execute();
			
			Integer intExiste=stmtProcedure.getInt(2);
			if(intExiste!=0)
				existe=true;
			//System.out.print("xiste? : " + existe);
			return existe;
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
	 //return existe;
	}

	//@Override
	public ClienteTO creaCliente(ClienteTO clienteTO)
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		ClienteTO cliente = null;
		try{
			stmtProcedure = connection.prepareCall("{ call PRO_ECI_CREACLIENTE(?,?,?,?,?) }");
			stmtProcedure.setString(1, clienteTO.getRut().trim());
			stmtProcedure.setString(2, (clienteTO.getNombreUsuario()==null?" ":clienteTO.getNombreUsuario()));
			stmtProcedure.setString(3, clienteTO.getNombreCompleto());
			stmtProcedure.setString(4, (clienteTO.getMail()==null?" ":clienteTO.getMail()));
			stmtProcedure.setString(5, clienteTO.getCodiArea());
			stmtProcedure.execute();
			
			cliente = obtenerCliente(clienteTO.getRut().trim());
			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		
		return cliente;
		
	}

	//@Override
	public void guardaAsignacionCLientesPG(Integer idProceso,
			String rut_usuario, String strRuts, Integer cantRuts)
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		try{
			stmtProcedure = connection.prepareCall("{ call PRO_ECI_SAVEUNIVERSOCLIETOPS(?,?,?,?) }");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.setString(2, rut_usuario);
			stmtProcedure.setString(3, strRuts);
			stmtProcedure.setInt(4, cantRuts);
			stmtProcedure.execute();
			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}		
	}

	//@Override
	public ClienteTO obtenerCliente(String rut)
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		ResultSet rs=null;
		ClienteTO cliente = null;
		try{
			stmtProcedure = connection.prepareCall("{ call PRO_ECI_OBTIENEDATOSCLIENTE(?,?) }");
			stmtProcedure.setString(1, rut);
			stmtProcedure.registerOutParameter(2, OracleTypes.CURSOR);
			stmtProcedure.execute();
			
			rs = ((OracleCallableStatement)stmtProcedure).getCursor(2);
			
			if(rs!=null)
			{
				while(rs.next())
				{
					cliente= new ClienteTO();
					cliente.setRut(rut);
					cliente.setMail(rs.getString(1));
					cliente.setNombreCompleto(rs.getString(2));
					cliente.setMail(rs.getString(3));
					cliente.setCodiArea(rs.getString(4));
				}
			}
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					////System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		
		return cliente;
	}
	
	//@Override
	public Boolean validaSiTieneEncabezado(Integer idProceso, String rut_usuario, Integer idPerfil)
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		Boolean existe = false;
		try{
			stmtProcedure = connection.prepareCall("{ call PRO_ECI_VALIDAENCABEZADOPE(?,?,?,?) }");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.setString(2, rut_usuario);
			stmtProcedure.setInt(3, idPerfil);
			stmtProcedure.registerOutParameter(4, Types.INTEGER);
			stmtProcedure.execute();
			
			if(stmtProcedure.getInt(4)>0)
			{
				existe=true;
			}
			
			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		return existe;
	}

	//@Override
	public String[] obtenerTodasLasUnidadesSuperiores(Integer idProceso,
			String rut_usuario) 
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		ResultSet rs=null;
		String[] arrUnidades=null;
		try{
			stmtProcedure = connection.prepareCall("{ call PRO_ECI_OBTTODASLASUNIDACARGO(?,?,?) }");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.setString(2, rut_usuario);
			stmtProcedure.registerOutParameter(3, OracleTypes.CURSOR);
			stmtProcedure.execute();
			
			rs = ((OracleCallableStatement)stmtProcedure).getCursor(3);
			
			if(rs!=null)
			{
				while(rs.next())
				{
					arrUnidades = new String[4];
					arrUnidades[0]=rs.getString(1);
					arrUnidades[1]=rs.getString(2);
					arrUnidades[2]=rs.getString(3);
					arrUnidades[3]=rs.getString(4);
				}
			}
		}catch(SQLException e)
		{
			//throw new ECISQLException(e);
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					////System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		
		return arrUnidades;
	}

	//@Override
	public void savePreguntasEspecificas(Integer idProceso,
			String strPreguntas, Integer cantPreguntas, String rut_creador,
			Integer perfil_creador, String codigoPE) 
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		try{
			stmtProcedure = connection.prepareCall("{ call PRO_ECI_CREAQESPECIFICA(?,?,?,?,?,?) }");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.setString(2, strPreguntas);
			stmtProcedure.setInt(3, cantPreguntas);
			stmtProcedure.setString(4, rut_creador);
			stmtProcedure.setInt(5, perfil_creador);
			stmtProcedure.setString(6, codigoPE);
			stmtProcedure.execute();
			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
	}
	
	//@Override
	public void saveEncabezado(Integer idProceso, String encabezado, String rut_creador, Integer perfil_creador, String codigoPE) 
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		try{
			stmtProcedure = connection.prepareCall("{ call PRO_ECI_CREAENCABEZADOPE(?,?,?,?,?) }");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.setString(2, encabezado);
			stmtProcedure.setString(3, rut_creador);
			stmtProcedure.setInt(4, perfil_creador);
			stmtProcedure.setString(5, codigoPE);
			stmtProcedure.execute();
			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
	}

	//@Override
	public String obtenerCodigoJerarquico(Integer idProceso, String rutPS)
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure = null;
		String codigo=null;
		try{
			stmtProcedure = connection.prepareCall("{ call PRO_ECI_OBTENERCODJERARQUICO(?,?,?) }");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.setString(2, rutPS);
			stmtProcedure.registerOutParameter(3, Types.VARCHAR);
			stmtProcedure.execute();
			
			codigo=stmtProcedure.getString(3);
			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		return codigo;
	}

	//@Override
	public List<PreguntaTO> obtenerPreguntasEspecificas(Integer idProceso,
			String rutUsuario, Integer perfilUsuario) 
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure=null;
		ResultSet rs = null;
		List<PreguntaTO> lstPreguntas = null;
		try{
			stmtProcedure = connection.prepareCall("{ call PRO_ECI_GETPGTASESPECIFICAS(?,?,?,?) }");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.setString(2, rutUsuario);
			stmtProcedure.setInt(3, perfilUsuario);
			stmtProcedure.registerOutParameter(4, OracleTypes.CURSOR);
			stmtProcedure.execute();
			rs = ((OracleCallableStatement)stmtProcedure).getCursor(4);
			
			if(rs!=null)
			{
				lstPreguntas = new ArrayList<PreguntaTO>();
				PreguntaTO pregunta=null;
				while(rs.next())
				{
					pregunta = new PreguntaTO();
					pregunta.setIdPregunta(rs.getInt(1));
					pregunta.setEnunciado(rs.getString(2));
					lstPreguntas.add(pregunta);
				}
			}
			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		return lstPreguntas;
	}

	//@Override
	public List<ClienteTO> obtenerUniversoClientesByIdPregunta(
			Integer idProceso, String rutUsuario, Integer idPregunta)
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure=null;
		ResultSet rs = null;
		List<ClienteTO> lstClientes = null;
		try{
			stmtProcedure = connection.prepareCall("{ call PRO_ECI_OBTIENERUNIVERSOCLIE(?,?,?,?) }");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.setString(2, rutUsuario);
			stmtProcedure.setInt(3, idPregunta);
			stmtProcedure.registerOutParameter(4, OracleTypes.CURSOR);
			stmtProcedure.execute();
			rs = ((OracleCallableStatement)stmtProcedure).getCursor(4);
			
			if(rs!=null)
			{
				lstClientes = new ArrayList<ClienteTO>();
				ClienteTO cliente=null;
				while(rs.next())
				{
					cliente = new ClienteTO();
					cliente.setRut(rs.getString(1));
					cliente.setNombreCompleto(rs.getString(2));
					cliente.setNombreArea(rs.getString(3));
					cliente.setAsociado(rs.getInt(4));
					lstClientes.add(cliente);
				}
			}
			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
		return lstClientes;
	}
	
	//@Override
	public void savaAsociacionClientePE(Integer idProceso, String rutUsuario, Integer idPerfil, String strRuts,
			Integer cantRuts, Integer idPregunta)
	{
		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure=null;
		try{
			stmtProcedure = connection.prepareCall("{ call PRO_ECI_SAVEASOCIACIONCLIETOPE(?,?,?,?,?,?) }");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.setString(2, rutUsuario);
			stmtProcedure.setInt(3, idPerfil);
			stmtProcedure.setString(4, strRuts);
			stmtProcedure.setInt(5, cantRuts);
			stmtProcedure.setInt(6, idPregunta);
			stmtProcedure.execute();			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
	}

	public void eliminaPS(Integer idProceso, String rutPS) {
		// TODO Auto-generated method stub

		Connection connection = ConexionOracle.getConnection();
		CallableStatement stmtProcedure=null;
		try{
			stmtProcedure = connection.prepareCall("{ call PRO_ECI_DELETEPS(?,?) }");
			stmtProcedure.setInt(1, idProceso);
			stmtProcedure.setString(2, rutPS);
			
			stmtProcedure.execute();
			
		}catch(SQLException e)
		{
			throw new ECISQLException(e);
		}
		finally
		{
			if(stmtProcedure!=null)
			{
				try{
					stmtProcedure.close();
				}
				catch(SQLException e)
				{
					//System.out.print("No se pudo cerrar el statement :"+ e);
				}
			}
			if(connection!=null)
			{
				try{
					connection.close();
				}catch (SQLException e) {
					//System.out.print("No se pudo cerrar la conexion :"+ e);
				}
			}
		}
	}
}
